﻿using System;
using System.Windows.Forms;

namespace AMM.Forms {
    public partial class FrmEntry : FrmRootBase {

        private static bool _closedFlag = false;

        public FrmEntry() {
            this.InitializeComponent();
        }

        public void KillSelf() {
            _closedFlag = true;

            this.Close();
            this.Dispose();
        }

        public static void LoadAndRun(Form form) {
            //form.HandleCreated += delegate
            //{
            //    new Thread((ThreadStart)delegate()
            //    {
            //        FrmEntry frmEntry = new FrmEntry();
            //        frmEntry.CancelEvent += delegate
            //        {
            //            if (!_closedFlag) {
            //                frmEntry.Invoke((MethodInvoker)delegate()
            //                {
            //                    form.Close();
            //                    form.Dispose();
            //                });
            //            }
            //        };
            //        form.Shown += delegate
            //        {
            //            _closedFlag = false;

            //            form.Invoke((MethodInvoker)frmEntry.KillSelf);
            //        };

            //        Application.Run(frmEntry);
            //    }).Start();
            //};

            form.Show();
            form.Activate();
        }

        public event EventHandler CancelEvent;

        public static void LoadAndRunDialog(Form form) {
            //form.HandleCreated += delegate
            //{
            //    new Thread((ThreadStart)delegate()
            //    {
            //        FrmEntry frmEntry = new FrmEntry();
            //        frmEntry.CancelEvent += delegate
            //        {
            //            if (!_closedFlag) {
            //                frmEntry.Invoke((MethodInvoker)delegate()
            //                {
            //                    form.Close();
            //                    form.Dispose();
            //                });
            //            }
            //        };
            //        form.Shown += delegate
            //        {
            //            _closedFlag = false;

            //            form.Invoke((MethodInvoker)frmEntry.KillSelf);
            //            //form.Dispose();
            //        };

            //        if (_closedFlag) {
            //            Application.Run(frmEntry);
            //        }
            //    }).Start();
            //};

            form.ShowDialog();
            form.Activate();

        }

        private void FrmEntry_Load(object sender, EventArgs e) {
            _closedFlag = false;
        }

        private void FrmEntry_FormClosed(object sender, FormClosedEventArgs e) {
            if (!_closedFlag) {
                this.CancelEvent(sender, EventArgs.Empty);
            }
        }
    }
}
